package modelo.adaptadores;

import java.net.URI;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlAdapter;

import modelo.datos.Empresa;
import modelo.datos.Entrada;
import modelo.datos.Persona;

public class EntradaAdapter extends XmlAdapter<EntradaAdapter.AdaptedEntrada, Entrada> {

	@Override
	public AdaptedEntrada marshal(Entrada entrada) throws Exception {
		if(entrada == null) return null;
//		AdaptedEntrada adaptedEntrada = new AdaptedEntrada();
//		if(entrada instanceof Persona) {
//			Persona persona = (Persona)entrada;
//			adaptedEntrada.nombre = persona.getNombre();
//			adaptedEntrada.apellidos = persona.getApellidos();
//			adaptedEntrada.nif = persona.getNif();
//			adaptedEntrada.self = persona.getSelf();
//			adaptedEntrada.parent = persona.getParent();
//		} else {
//			Empresa empresa = (Empresa)entrada;
//			adaptedEntrada.nombre = empresa.getNombre();
//			adaptedEntrada.nif = empresa.getNif();
//			adaptedEntrada.self = empresa.getSelf();
//			adaptedEntrada.parent = empresa.getParent();
//		}
//		return adaptedEntrada;
		return entrada.mapea();
	}

	@Override
	public Entrada unmarshal(AdaptedEntrada adaptedEntrada) throws Exception {
		if(adaptedEntrada == null) return null;
		if(adaptedEntrada.apellidos != null) {
			Persona persona = new Persona();
			persona.setNombre(adaptedEntrada.nombre);
			persona.setApellidos(adaptedEntrada.apellidos);
			persona.setNif(adaptedEntrada.nif);
			persona.setSelf(adaptedEntrada.self);
			persona.setParent(adaptedEntrada.parent);
			return persona;
		} else {
			Empresa empresa = new Empresa();
			empresa.setNombre(adaptedEntrada.nombre);
			empresa.setNif(adaptedEntrada.nif);
			empresa.setSelf(adaptedEntrada.self);
			empresa.setParent(adaptedEntrada.parent);
			return empresa;
		}
	}
	
	@XmlRootElement(name="entrada")
	public static class AdaptedEntrada {
		@XmlElement
		public String nombre;
		@XmlElement
		public String apellidos;
		@XmlElement
		public String nif;
		@XmlElement
		public URI self;
		@XmlElement
		public URI parent;
	}
}
